﻿using S7SingalTool.Configuration;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Windows.Forms.Design.AxImporter;

namespace S7SingalTool
{
    public class SqlSugarHelper //不能是泛型类
    {


        //   string connstring = AppConfig.Get<string>("ConnectionStrings:KAISHI_Web_MES");
        public static string ConnectionString { get; set; }
        //多库情况下使用说明：
        //如果是固定多库可以传 new SqlSugarScope(List<ConnectionConfig>,db=>{}) 文档：多租户
        //如果是不固定多库 可以看文档Saas分库
        //用单例模式


        protected static Lazy<SqlSugarScope> Db = new Lazy<SqlSugarScope>(() => GetDB());
        /// <summary>
        /// 单例模式
        /// 数据库对象
        /// </summary>
        public static SqlSugarClient MesDB => Db.Value.CopyNew();

        private static SqlSugarScope GetDB()
        {
            List<DbConfigs> dbConfigs = AppConfig.AppsettingConfig.DbConfigs;
            var c = dbConfigs.FirstOrDefault();
            return new SqlSugarScope(new ConnectionConfig()
                    {
                        ConfigId = c.ConfigId,
                        ConnectionString = c.Conn,//连接符字串
                        DbType = (DbType)c.DbType,//数据库类型
                        IsAutoCloseConnection = true //不设成true要手动close
                    },
                   db => {
                       //(A)全局生效配置点，一般AOP和程序启动的配置扔这里面 ，所有上下文生效
                       //调试SQL事件，可以删掉
                       db.Aop.OnLogExecuting = (sql, pars) =>
                       {

                           //获取原生SQL推荐 5.1.4.63  性能OK
                           Console.WriteLine(UtilMethods.GetNativeSql(sql, pars));

                           //获取无参数化SQL 对性能有影响，特别大的SQL参数多的，调试使用
                           //Console.WriteLine(UtilMethods.GetSqlString(DbType.SqlServer,sql,pars))

                       };

                       //多个配置就写下面
                       //db.Ado.IsDisableMasterSlaveSeparation=true;

                       //注意多租户 有几个设置几个
                       //db.GetConnection(i).Aop
                   });
        }

   
       
    }
}
